const Koa = require('koa');
const path = require('path');
const koaStatic = require('koa-static');
const Router = require('koa-router');
const cors = require('koa2-cors');
const bodyParser = require('koa-bodyparser');  // 解析post参数，支持json,form,text类型
const koaBody = require('koa-body');    //解析http中body的部分的中间件，包括json、表单、文本、文件等


const app = new Koa();

const staticPath = './public';  // 静态资源目录路径
app.use(koaStatic(path.join(__dirname, staticPath)));

// 跨域配置
// app.use(cors());
app.use(
    cors({
        origin: function(ctx) { //设置允许来自指定域名请求
            if (ctx.url === '/test') {
                return '*'; // 允许来自所有域名请求
            }
            return 'http://localhost:8080'; //只允许http://localhost:8080这个域名的请求
            // return '*'; // 允许来自所有域名请求
        },
        maxAge: 5, //指定本次预检请求的有效期，单位为秒。
        credentials: true, //是否允许发送Cookie
        allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法
        allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
        exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] //设置获取其他自定义字段
    })
);

// 注意：这里的koaBody中间件的加载要在bodyParser之前
app.use(koaBody({
    multipart: true,    //解析多个文件
    formidable: {
        maxFileSize: 10 * 1024 * 1024,    // 设置上传文件大小最大限制，默认2M
        //uploadDir: 可以填写一个路径，不填写默认为 os.tmpDir()
        // multipart: true
    }
}));
app.use(bodyParser());  // 实现post参数解析,支持json,form,text类型

const home = require('./routes/home');
const admin = require('./routes/admin');

// 父级路由, 装载所有子路由
let router = new Router();
router.use('/home', home.routes(), home.allowedMethods());
router.use('/admin', admin.routes(), admin.allowedMethods());
// 文件上传
let baseUrl = 'http://localhost:4000/upload/';
let { fileUpload }= require('./utils/FileUploadDownload')
router.post('/uploadFile', async ctx=>{
    let file= ctx.request.files.ImgFile;
    let result= await fileUpload(file);
    if(result.status===0) {
        ctx.body = {
            errno: 0,  // errno 即错误代码，0 表示没有错误。具体查看wangEditor官网：https://www.wangeditor.com/doc
            // data 是一个数组，返回图片Object，Object中包含需要包含url、alt和href三个属性,它们分别代表图片地址、图片文字说明和跳转链接,alt和href属性是可选的，可以不设置或设置为空字符串,需要注意的是url是一定要填的。
            data: [{ url: baseUrl + result.filename }]
        }
    } else {
        ctx.body = {
            errno: 1,
            data: [{ url: '',  alt: '图片上传错误'}]
        }
    }
})


// 加载路由中间件
app.use(router.routes()).use(router.allowedMethods());




app.listen(4000, () => {
    console.log('服务器开启', 'http://localhost:4000')
});

